_Pragma("once");

#include "LoopController.h"
#include "SlaveLoopController.h"

class SlaveLoopController;

/**
 * 拓展回路上的回路控制器
 *
 * @author lizb
 */
class ExtendLoopController : public LoopController {

    using LoopController::LoopController;

    bool initialize() noexcept override;

    bool recheck() noexcept override{
        bool result = true;
        if (nullptr == mloopStatusArray){
            result = false;
        } else {
             result = LoopController::recheck();
        }

       return result;
    }

    /**
     * 初始化从机
     */
    void initSlaveController();

    int initLoopGroupInfo(LoopGroupInfos& loopGroups) override;

    /**
     * 设置相关相位，如果长度不足，不修改后续且不保存
     *
     * @param phaseString 所有相位信息
     */
    bool updateInformation()override;

    void buildCommandAndSavePhase()override;

    /***
    * 回路控制器实际的控制方法
    *
    * @param command
    * @return
    */
    void changeAllChannelStatusFunc(const LoopStatus* command, const LoopSize_t& length) override ;

    /***
     * 回路控制器实际的控制方法
     *
     * @param status
     * @param loopNum 从0开始
     * @return
     */
    void changeSingleChannelStatusFunc(const int& loopIndex, const LoopStatus& status) override;


    SlaveLoopController* locateSlaveController(int loopIndex, std::size_t& indexInSlave);


    LoopSize_t mbeginIndex;

    /**
      * 从机列表
      */
    std::vector<SlaveLoopController> mslaveLoopControllers;
};
